x86/apic: fix potential Protection Fault during shutdown
authorAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 14 Jun 2011 11:47:45 +0000 (12:47 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 14 Jun 2011 11:47:45 +0000 (12:47 +0100)
commit512f16bf73e62e6198f368d1549a936089a881e4
tree6a553719750dc67f5dfb9836bb594ba3937a1f4f
parent046b947fb09a1fed471b5af716467bbc03f8783b
x86/apic: fix potential Protection Fault during shutdown

This is a rare case, but if the BIOS is set to uniprocessor, and Xen
is booted with 'lapic x2apic', Xen will switch into x2apic mode, which
will cause a protection fault when disabling the local APIC.  This
leads to a general protection fault as this code is also in the fault
handler.

When x2apic mode is enabled, the only tranlsation which does
not result in a protection fault is to clear both the EN and EXTD
bits, which is safe to do in all cases, even if you are in xapic
mode rather than x2apic mode.

The linux code from which this is derrived is protected by an
if ( ! x2apic_mode ...) clause which is how they get away with it.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@novell.com>
xen/arch/x86/apic.c